/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package carvajal.dane.entidades;

import carvajal.dane.anotaciones.OmitirEnGson;
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Javier
 */
@Entity
@Table(name = "PREGUNTA")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Pregunta.findAll", query = "SELECT p FROM Pregunta p"),
    @NamedQuery(name = "Pregunta.findByIdpregunta", query = "SELECT p FROM Pregunta p WHERE p.idpregunta = :idpregunta"),
    @NamedQuery(name = "Pregunta.findByTextopregunta", query = "SELECT p FROM Pregunta p WHERE p.textopregunta = :textopregunta")})
public class Pregunta implements Serializable {
    private static final long serialVersionUID = 1L;
    @SequenceGenerator(
        name="IDPREGUNTA_SEQ_GEN",
        sequenceName="SEQ_PREGUNTA", allocationSize=1
    )
    @Id @GeneratedValue(strategy=javax.persistence.GenerationType.SEQUENCE, generator="IDPREGUNTA_SEQ_GEN")
    @Basic(optional = false)
    @NotNull
    @Column(name = "IDPREGUNTA", nullable = false)
    private Long idpregunta;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 1000)
    @Column(name = "TEXTOPREGUNTA", nullable = false, length = 1000)
    private String textopregunta;
    @OmitirEnGson
    @ManyToMany(mappedBy = "preguntaList")
    private List<Encuesta> encuestaList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "idpregunta")
    private List<Opcionrespuesta> opcionrespuestaList;
    @JoinColumn(name = "IDTIPOPREGUNTA", referencedColumnName = "IDTIPOPREGUNTA", nullable = false)
    @ManyToOne(optional = false)
    private Tipopregunta idtipopregunta;

    public Pregunta() {
    }

    public Pregunta(Long idpregunta) {
        this.idpregunta = idpregunta;
    }

    public Pregunta(Long idpregunta, String textopregunta) {
        this.idpregunta = idpregunta;
        this.textopregunta = textopregunta;
    }

    public Long getIdpregunta() {
        return idpregunta;
    }

    public void setIdpregunta(Long idpregunta) {
        this.idpregunta = idpregunta;
    }

    public String getTextopregunta() {
        return textopregunta;
    }

    public void setTextopregunta(String textopregunta) {
        this.textopregunta = textopregunta;
    }

    @XmlTransient
    public List<Encuesta> getEncuestaList() {
        return encuestaList;
    }

    public void setEncuestaList(List<Encuesta> encuestaList) {
        this.encuestaList = encuestaList;
    }

    @XmlTransient
    public List<Opcionrespuesta> getOpcionrespuestaList() {
        return opcionrespuestaList;
    }

    public void setOpcionrespuestaList(List<Opcionrespuesta> opcionrespuestaList) {
        this.opcionrespuestaList = opcionrespuestaList;
    }

    public Tipopregunta getIdtipopregunta() {
        return idtipopregunta;
    }

    public void setIdtipopregunta(Tipopregunta idtipopregunta) {
        this.idtipopregunta = idtipopregunta;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idpregunta != null ? idpregunta.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Pregunta)) {
            return false;
        }
        Pregunta other = (Pregunta) object;
        if ((this.idpregunta == null && other.idpregunta != null) || (this.idpregunta != null && !this.idpregunta.equals(other.idpregunta))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "carvajal.dane.entidades.Pregunta[ idpregunta=" + idpregunta + " ]";
    }
    
}
